package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.Region;
import cn.wolfcode.trip.base.domain.Strategy;
import cn.wolfcode.trip.base.query.StrategyQuery;
import cn.wolfcode.trip.base.service.IRegionService;
import cn.wolfcode.trip.base.service.IStrategyService;
import com.github.pagehelper.PageInfo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 旅游地区资源控制器
 */
@RestController
@RequestMapping("regions")
public class RegionController {
    @Autowired
    private IRegionService regionService;

    @Autowired
    private IStrategyService strategyService;

    @Autowired
    private ServletContext servletContext;

    /**
     * 获取所有地区的接口
     * 1.资源 /regions
     * 2.请求方式 get
     * 3.请求参数 state状态
     * 4.返回结果 List<Region>
     */
    @GetMapping
    public List<Region> selectAll(Integer state) {
        return regionService.selectAll(state);
    }

    /**
     * 获取某个地区下的攻略数据
     * 1.资源 /regions/{id}/strategies
     * 2.请求方式 get
     * 3.请求参数 待定
     * 4.返回结果 局部html
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=text/html")
    public void query(StrategyQuery qo, HttpServletResponse response) throws IOException, TemplateException {
        //获取该地区下的所有推荐的攻略(查全部)
        qo.setPageSize(0);//不分页
        qo.setState(Strategy.STATE_HOT);//推荐的状态
        PageInfo hot = strategyService.query(qo);
        System.out.println(hot);
        //获取该地区下的所有攻略(分页)
        qo.setPageSize(4);//分页
        qo.setState(null);//不需要状态
        qo.setNotDisable(true);//非禁用状态
        PageInfo all = strategyService.query(qo);
        System.out.println(all);
        //需要渲染的数据
        Map root = new HashMap();
        root.put("hot", hot);
        root.put("all", all);

        //创建freemarker的配置对象
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
        //指定模板文件所在的文件目录。
        File templates = new File(servletContext.getRealPath("templates"));
        cfg.setDirectoryForTemplateLoading(templates);
        //设置编码
        cfg.setDefaultEncoding("utf-8");
        //获取模板文件
        Template template = cfg.getTemplate("test.ftl");
        //设置响应的编码
        response.setContentType("text/html;charset=utf-8");
        //合并模板和数据
        template.process(root, response.getWriter());
    }

    /**
     * 获取某个地区下的攻略数据(json)
     * 1.资源 /regions/{id}/strategies
     * 2.请求方式 get
     * 3.请求参数 待定
     * 4.返回结果 分页json
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=application/json")
    public PageInfo query(StrategyQuery qo) {
        qo.setPageSize(4);
        return strategyService.query(qo);
    }

}
